package br.com.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.beans.Cidade;
import br.com.beans.Estado;

/**
 * Classe de manipulacao de objetos persistidos via JPA
 * Objetos da classe bean Cidade
 */
public class CidadeDAO extends GenericDAO<Cidade> {

	/** Lista cidades pelo estado. 
	 * @param estado Estado
	 * @return lista de cidades
	 */
	@SuppressWarnings("unchecked")
	public List<Cidade> listarPorEstado(Estado estado) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		List<Cidade> list = null;

		try {

			t.begin();
			Query q = em.createQuery("from Cidade where estado = :estado");
			q.setParameter("estado", estado);
			list = (List<Cidade>) q.getResultList();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return list;
	}

	/** Localiza cidade pelo nome.
	 * @param nome Nome da cidade
	 * @return objeto persistido
	 */
	public Cidade localizar(String nome) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		Cidade cidade = null;
		
		try {

			t.begin();
			Query q = em.createQuery("from Cidade where nome like :nome");
			q.setParameter("nome", nome);
			cidade = (Cidade) q.getSingleResult();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return cidade;
	}
}
